package pre.dao;

import java.util.ArrayList;
import java.util.HashMap;

import javax.annotation.Resource;

import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;

import pre.vo.boardVO;
import pre.vo.pageVO;

/**
 * DAO 클래스
 * 
 * @author hyem55
 * 
 */
@Repository("boardDAO")
public class boardDAO {
	
	// @Resource : 의존성 주입 어노테이션의 일종으로 name 속성에 자동으로 연결할 빈 객체의 이름을 입력
	// DB 접근할수 있는 객체 생성
	@Resource(name = "sqlMapClientTemplate")
	private SqlMapClientTemplate sqlmap;
	
	/*게시판 목록 조회*/
	
	//게시글 전체 개수를 얻는 메소드
	public int getTotalCountOfBoard(){
		return (Integer) sqlmap.queryForObject("board.selectTotalBoard");
	}
	
	//페이징처리된 게시판 전체 리스트 출력
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public ArrayList<boardVO> selectBoardListByPage(int page){
		HashMap map = new HashMap();
		map.put("page", page);
		map.put("perPage", pageVO.CONTENT_PER_PAGE);
		return (ArrayList<boardVO>) sqlmap.queryForList("board.selectBoardListByPage",map);
	}
	
	/*글쓰기*/
	
	//게시물 번호를 얻는 메소드
	public int getBoardNum(){
		return (Integer) sqlmap.queryForObject("board.selectBoardNum");
	}
	//게시물 등록(저장)하는 메소드
	public void insertBoard(boardVO board){
		sqlmap.insert("board.insertBoard", board);
	}
	

	//해당 num과 일치하는 게시물을 조회하는 메소드 -> detailView에서 사용
	//1. 
	public boardVO selectBoardByNum(int boardNum){
		System.out.println("dAO :"+boardNum);
		return (boardVO) sqlmap.queryForObject("board.selectBoardByNum",boardNum);
	}
	
	//해당 num과 일치하는 게시물을 삭제하는 메소드
	public void deleteBoard(int boardNum){
		sqlmap.delete("board.deleteBoard",boardNum);
	}
	
	/*검색조건에 따른 게시판 조회*/
	//글쓴이로 조회하기
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public ArrayList<boardVO> searchBoardListByRegName(int page, String regName){
		HashMap map = new HashMap();
		map.put("page", page);
		map.put("perPage", pageVO.CONTENT_PER_PAGE);
		map.put("regName", regName);
		return (ArrayList<boardVO>) sqlmap.queryForList("board.selectBoardByRegName",map);				
	}
	
	//제목으로 조회하기
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public ArrayList<boardVO> searchBoardListBySubject(int page, String subject){
		HashMap map = new HashMap();
		map.put("page", page);
		map.put("perPage", pageVO.CONTENT_PER_PAGE);
		map.put("subject", subject);
		return (ArrayList<boardVO>) sqlmap.queryForList("board.selectBoardBySubject",map);				
	}
	
	//글 수정
	public boardVO updateBoard(boardVO board){
		//글 내용 갱신
		sqlmap.update("board.updateBoard", board);
		//갱신된 내용 리턴
		return selectBoardByNum(board.getNum());
	}
}
